package wiki.zimo.utils;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.util.CycleDetectionStrategy;
import net.sf.json.xml.XMLSerializer;

import java.util.List;
import java.util.Map;

/**
 * 处理json数据的工具类
 *
 * @author 子墨
 * @date 2018年5月29日 上午8:11:51
 */
public class JsonUtils {

    /**
     * @auther: 子墨
     * @date: 2018/10/30 12:53
     * @describe: 数组转换为Json格式的数据
     * @param: [objects]
     * @return: java.lang.String
     * @version v1.0
     */
    public static String arrayToJson(Object[] objects) {
        JSONArray jsonArray = JSONArray.fromObject(objects);
        return jsonArray.toString();
    }

    /**
     * @auther: 子墨
     * @date: 2018/10/30 12:53
     * @describe: list集合转换为Json格式的数据
     * @param: [list]
     * @return: java.lang.String
     * @version v1.0
     */
    public static String listToJson(List<?> list) {
        JSONArray jsonArray = JSONArray.fromObject(list);
        return jsonArray.toString();
    }

    /**
     * @auther: 子墨
     * @date: 2018/10/30 12:54
     * @describe: map集合转换为Json格式的数据
     * @param: [map]
     * @return: java.lang.String
     * @version v1.0
     */
    public static String mapToJson(Map<?, ?> map) {
        JSONObject jsonObject = JSONObject.fromObject(map);
        return jsonObject.toString();
    }

    /**
     * @auther: 子墨
     * @date: 2018/10/30 12:55
     * @describe: 对象转换为Json格式的数据
     * @param: [object]
     * @return: java.lang.String
     * @version v1.0
     */
    public static String objectToJson(Object object) {
        JSONObject jsonObject = JSONObject.fromObject(object);
        return jsonObject.toString();
    }

    /**
     * @auther: 子墨
     * @date: 2018/10/30 12:55
     * @describe: xml格式的数据转换为Json格式的数据
     * @param: [xml]
     * @return: java.lang.String
     * @version v1.0
     */
    public static String xmlToJson(String xml) {
        JSONArray jsonArray = (JSONArray) new XMLSerializer().read(xml);
        return jsonArray.toString();
    }

    /**
     * @auther: 子墨
     * @date: 2018/10/30 12:55
     * @describe: 过滤某些字段
     * @param: [excludes]
     * @return: net.sf.json.JsonConfig
     * @version v1.0
     */
    public static JsonConfig configJson(String[] excludes) {
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.setExcludes(excludes);
        jsonConfig.setIgnoreDefaultExcludes(true);
        jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
        return jsonConfig;
    }
}
